/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年4月26日
 * <修改描述:>
 */
package com.tx.component.sendsms.context;

import java.util.Map;

import com.tx.component.communication.model.SendResult;
import com.tx.component.sendsms.model.SendSMSWithTemplateRequest;
import com.tx.component.sendsms.model.SendSMSWTChannelEnum;
import com.tx.component.sendsms.model.SmsTemplateCode;

/**
 * 发送短信引擎<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年4月26日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public interface SendSMSEngine {
    
    /**
     * 根据渠道及对应的模板编码发送短信<br/>
     * <功能详细描述>
     * @param phoneNumbers
     * @param channel
     * @param code
     * @param parameters
     * @return [参数说明]
     * 
     * @return SendResult [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SendResult sendWithTemplate(String phoneNumbers,
            SendSMSWTChannelEnum channel, SmsTemplateCode code,
            Map<String, String> parameters);
    
    /**
     * 使用短信模板发送短信消息<br/>
     * <功能详细描述>
     * @param phoneNumbers
     * @param code
     * @param attributes
     * @return [参数说明]
     * 
     * @return SendResult [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SendResult sendWithTemplate(String phoneNumbers,
            SmsTemplateCode code, Map<String, String> parameters);
    
    /**
     * 通过第三方模板编码发送短信<br/>
     * <功能详细描述>
     * @param phoneNumbers
     * @param channel
     * @param templateCode
     * @param parameters
     * @return [参数说明]
     * 
     * @return SendResult [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SendResult sendWithTemplate(String phoneNumbers,
            SendSMSWTChannelEnum channel, String templateCode,
            Map<String, String> parameters);
    
    /**
     * 通过第三方模板编码发送短信<br/>
     * <功能详细描述>
     * @param phoneNumbers
     * @param channel
     * @param templateCode
     * @param parameters
     * @param signName
     * @return [参数说明]
     * 
     * @return SendResult [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SendResult sendWithTemplate(String phoneNumbers,
            SendSMSWTChannelEnum channel, String templateCode,
            Map<String, String> parameters, String signName);
    
    /**
     * 通过制定渠道枚举发送短信<br/>
     * <功能详细描述>
     * @param request
     * @return [参数说明]
     * 
     * @return SendResult [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SendResult sendWithTemplate(SendSMSWithTemplateRequest request);
    
    /**
     * 根据code值获取映射中的SmsTemplateCode实例<br/>
     * <功能详细描述>
     * @param code
     * @return [参数说明]
     * 
     * @return SmsTemplateCode [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public SmsTemplateCode getTemplateCode(String code);
    
    /**
     * 获取所有的已经注册了的SmsTemplateCode的枚举实例<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return List<SmsTemplateCode> [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public Map<String, SmsTemplateCode> getTemplateCodeMap();
    
}
